package model

import (
	"gorm.io/gorm"
	"time"
)

// UserRole 用户角色类型
type UserRole int

const (
	SuperAdmin UserRole = 1 // 超级管理员
	Admin      UserRole = 2 // 管理员
	Normal     UserRole = 3 // 普通用户
)

type User struct {
	gorm.Model
	Username    string     `gorm:"type:varchar(50);not null;uniqueIndex;comment:用户名" json:"username"`
	Password    string     `gorm:"type:varchar(255);not null;comment:密码" json:"-"`  // json:"-" 确保密码不会被序列化
	Salt        string     `gorm:"type:varchar(32);not null;comment:密码盐值" json:"-"` // json:"-" 确保盐值不会被序列化
	Phone       string     `gorm:"type:varchar(20);uniqueIndex;comment:手机号" json:"phone"`
	Email       string     `gorm:"type:varchar(100);uniqueIndex;comment:邮箱" json:"email"`
	Nickname    string     `gorm:"type:varchar(50);comment:昵称" json:"nickname"`
	Avatar      string     `gorm:"type:varchar(255);comment:头像URL" json:"avatar"`
	Role        UserRole   `gorm:"type:tinyint;not null;default:3;comment:用户角色 1:超级管理员 2:管理员 3:普通用户" json:"role"`
	Status      int        `gorm:"type:tinyint;not null;default:1;comment:状态 1:正常 0:禁用" json:"status"`
	LastLoginAt *time.Time `gorm:"comment:最后登录时间" json:"lastLoginAt,omitempty"`
}

func (User) TableName() string {
	return "t_user"
}

// NewUser 创建新用户
func NewUser(username, password string, role UserRole) *User {
	return &User{
		Username: username,
		Password: password,
		Role:     role,
		Status:   1,
	}
}
